package cn.com.polymorphic;

public class TestPoly3 {
    public static void main(String[] args) {
            Animal2 a = new Animal2();
            a.eat();
           // a.run();父类无法调用子类特有方法
        Mouse m = new Mouse();
        m.eat();
        m.run();//特有

        Bird b = new Bird();
        b.eat();
        //8.创建多态对象进行测试
        /**口诀1:父类引用 指向子类对象*/
        /**口诀2:编译(保存)看左边,运行(测试)看右边*/
        Animal2 a1 = new Mouse();
        Animal2 a2 = new Bird();
        a1.eat();//eat()使用的是父类的声明,但使用的是子类的实现方式
        a2.eat();
        //a1.run();报错！！不能再使用子类特有功能。
        /**多态的出现是为了统一调用标准,向父类看齐
         * 父类提供的功能才能用,子类特有的功能用不了*/
    }
}

class Animal2{
    //普通方法
    public void eat(){
        System.out.println("动物啥都吃");
    }
}
class Mouse extends Animal2{

    public void eat(){
        System.out.println("老鼠爱吃大米");
    }  //重写父类
    public void run(){
        System.out.println("老鼠跑的贼快");
    }//子类特有！！！！！！！
}
class Bird extends Animal2{
        public void eat(){ //重写父类
            System.out.println("鸟儿爱吃虫子");
        }//重写父类
}